// 导入模块
import { useUserStore } from '@/stores/user'
import Request from 'luch-request'

// 实例化网络请求
const request = new Request({
  // 接口基地址
  baseURL: 'https://consult-api.itheima.net',
   // 只要通过请求对象发请求，custom ，loading ：true
  // custom固定
  // key 可以随意设置
  custom: {
    loading: true,
    title: '加载中~',
    // showLoading: true,
  },
})

// 请求拦截器(统一携带设置一些公共的信息给服务器，比如 token)
request.interceptors.request.use(
    config => {
      // // config.header!['authorization'] = '123123123123'
      // config.header = {
      //   ...config.header,
      //   // authorization: '123454323',
       // 只要有 token
    const store = useUserStore()

     // 定义数组保存 不需要携带 token 的地址
    // (白名单)
    const whitePaths = ['/login/password', '/login', '/code']
    // console.log(config.url)
    // 携带 token 屏蔽不需要携带token 的 3 个接口
    // !whitePaths.includes(config.url) 请求的地址 不在数组中存在 才需要携带 token
    if (store.token && !whitePaths.includes(config.url!) ) {
      config.header!.Authorization = `Bearer ${store.token}`
      }

    // console.log(config.custom?.loading)
    // console.log(config.custom?.showLoading)

    if (config.custom?.loading) {
      // 开启 loading
      uni.showLoading({
        title: config.custom?.title,
        mask: true,
      })
    }
      return config
    },
    config => {
      // 可使用async await 做异步操作
      return Promise.reject(config)
    }
  )
  
  // 响应拦截器
  // 对于服务器响应的内容做一些统一的处理，比如异常提示
  request.interceptors.response.use(
    response => {
       // 关闭 loading
    uni.hideLoading()
      // 自定义的状态码 10000 成功，其他 失败
      if (response.data.code !== 10000) {
        uni.showToast({
          title: response.data.message,
          icon: 'none',
        })
        // 通用的信息 抛出
        return Promise.reject(response.data)
      }
      // 正常解析  简化数据返回
      return response.data?.data
      // return response
    },
    response => {
       // 关闭 loading
    uni.hideLoading()
      if (response.data.code === 401) {
        uni.showToast({
          title: response.data.message,
          icon: 'none',
        })
        //让用户去登录即可
        //关闭当前页，跳转到指定页面
        uni.redirectTo({
          url:'/pages/login/index'

        })
      }
      return Promise.reject(response)
    }
  )
// 导出配置好的模网络模块
export { request }